Node js request와 cheerio

Request

Node js에는 Request라는 모듈이 있어 아주 간단하게 http 요청을 보낼 수 있다. 기본적으로 Node js가 제공하는 http 모듈을 더욱 사용하기 쉽게 만들어 더욱 짧은 줄로 간단하게 http 요청을 보낼 수 있다.

1
npm install --save request

먼저 request모듈을 사용하기 위해 npm을 통해 request 모듈을 설치한다.

1
2
3
4
5
6
7
8
9
var request = require('request');

var url = 'http://www.google.com';

request(url,function(err,res,body)
{
if(!err && res.statusCode == 200)
console.log(body);
});

기본적으로 get 방식을 통하여 url에 접근하여 응답을 받고 html요소를 log에 출력하는 코드이다. 위와 같은 코드를 실행하게 된다면 예외가 없고 성공적으로 200 코드를 받았을 경우 html을 출력한다.

또한 request.Method()

// GET

// POST

// PUT

// DELETE 와 같은 함수를 통해 손쉽게 Rest Api를 호출 할 수 있고 option 객체를 만들어 파라미터에 넘겨 주는 것으로 명시적으로 header, method, data 등을 설정 가능하다.

1
2
3
4
5
6
7
8
9
10
11
var option = {
uri: url,
method: 'POST',
json: {
'data': data
}
};

request(option,function(err,res,body)
{
});

위와 같은 방법으로 옵션 객체를 만들고 거기에 특정 필드 부분을 추가하여 여러가지 옵션들을 바꿀 수 있다. 이 외에도 file의 stream을 열어 multipart로 전송하여 upload하는 방법도 사용할 수 있는데 이러한 부분은 모두 추상화되어 있는 다른 모듈을 사용하도록 하자 (Multer).

Cheerio

Request로 Html 형식의 텍스트를 받아왔다면 이를 파싱할 파서가 필요하다. Node js 에는 Cheerio라는 모듈이 존재해서 아주 간단하고 다양한 방법으로 DOM의 Element에 접근할 수 있다.

1
npm install --save cheerio
1
2
3
4
5
6
7
8
9
10
11
var cheerio = request('cheerio');

request(url,function(err, res, body)
{
var $ = cheerio.load(body);

var tbody = $('table tbody');

tbody.children().first().text('첫번째 자식');
tbody.childeren().first().next().append('<li class="apple" > Apple</li>');
});

위의 코드로 cheerio로 모듈을 가져오고 jquery 방식처럼 간편히 접근할 수 있도록 $에 body를 load한 개체를 담는다.

그 후에는 jquery와 비슷한 방식으로 css selector 방식으로 손쉽게 접근 가능하다. ‘table tbody’와 같이 접근했다면 table이라는 element 요소의 밑에 있는 tbody element를 모두 가져와 tbody에 담는다. 위와 같이 element를 지정하는 것이 아니라 class 접근자 . id 접근자 # 모두 사용 가능하다.

위와 같이 조작할 element요소를 찾았다면 그 요소에 대한 속성, 텍스트 값 등을 모두 조작 가능하다.

children() -> 현재 요소 밑에 모든 자식들을 찾아준다.

first() -> 요소들 중에 가장 첫번째 요소를 찾아준다.

text -> text를 얻어오거나 text를 set 한다. -> text안에 value를 넣어주면 set 되고 넣지 않으면 get할 수 있다.

next() -> 현재 요소의 다음 형제 요소를 찾는다.

append() -> 현재 요소의 자식을 하나 추가한다.

####사이트 : cheerio GitHub

공유하기